#ifndef DIAGNOSTIC_H
#define DIAGNOSTIC_H

#include "../Input/PicParams.h"
#include "../Parallel/ParallelMPI.h"
#include "../Grid/Grid.h"
#include "../Tool/Log.h"

#include <iostream>
#include <vector>

class PSI;
class Collision;

using namespace std;

class Diagnostic
{

public :

    Diagnostic(PicParams* params_, ParallelMPI* pmpi_, Grid* grid_, PhysicalField* fields_, vector<Species*>* vecSpecies_, vector<Collision*>* vecCollision_, vector<PSI*>* vecPSI_);
    virtual ~Diagnostic() {};

    //run the diag for all patches for local diags.
    virtual void run( ParallelMPI* pmpi, Grid* grid, vector<Species*>& vecSpecies, PhysicalField* fields, vector<PSI*>& vecPSI, int timestep ) {};

    const int n_species;
    const int n_collision;
    const int n_psi;

    PicParams* params;
    ParallelMPI* pmpi;
    Grid* grid;
    PhysicalField* fields;
    vector<Species*>* vecSpecies;
    vector<Collision*>* vecCollision;
    vector<PSI*>* vecPSI;
    DiagnosticParameter diagnostic_param;

protected :


};

#endif
